﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using Loja_Virtual_Livraria.App_Code.Model;
using Loja_Virtual_Livraria.App_Code.BLL;

namespace Loja_Virtual_Livraria.App_Code.SQLServerDAL
{
    public class PessoaDAL
    {
        public static void insertPessoa(Pessoa myPessoa)
        {
            SqlConnection myConnection = null;
            try
            {
                myConnection = SQLServerConnection.getConnection();
                SqlCommand myCommand = new SqlCommand("INSERT INTO Pessoa (email, observacao, login, senha) " +
                "VALUES (@email, @observacao, @login, @senha)", myConnection);

                SqlParameter paramEmail = new SqlParameter("email", SqlDbType.VarChar);
                paramEmail.Direction = ParameterDirection.Input;
                paramEmail.Value = myPessoa.getEmail();

                SqlParameter paramObservacao = new SqlParameter("observacao", SqlDbType.VarChar);
                paramObservacao.Direction = ParameterDirection.Input;
                paramObservacao.Value = myPessoa.getObservacao();

                SqlParameter paramLogin = new SqlParameter("login", SqlDbType.VarChar);
                paramLogin.Direction = ParameterDirection.Input;
                paramLogin.Value = myPessoa.getLogin();

                SqlParameter paramSenha = new SqlParameter("senha", SqlDbType.VarChar);
                paramSenha.Direction = ParameterDirection.Input;
                paramSenha.Value = myPessoa.getSenha();

                myCommand.Parameters.Add(paramEmail);
                myCommand.Parameters.Add(paramObservacao);
                myCommand.Parameters.Add(paramLogin);
                myCommand.Parameters.Add(paramSenha);

                myConnection.Open();
                myCommand.ExecuteNonQuery();
            }
            finally
            {
                if (myConnection != null)
                    myConnection.Close();
            }
        }

        public static Pessoa selectPessoaByLogin(string myLogin)
        {
            SqlConnection myConnection = null;
            SqlDataReader myDataReader = null;
            Pessoa myPessoa = null;
            try
            {
                myConnection = SQLServerConnection.getConnection();
                SqlCommand myCommand = new SqlCommand("SELECT * FROM Pessoa WHERE login = @login", myConnection);

                SqlParameter paramLogin = new SqlParameter("login", SqlDbType.VarChar);
                paramLogin.Direction = ParameterDirection.Input;
                paramLogin.Value = myLogin;

                myConnection.Open();
                myCommand.Parameters.Add(paramLogin);
                myDataReader = myCommand.ExecuteReader();

                if (myDataReader.Read())
                {
                    myPessoa = PessoaBLL.newPessoa();
                    myPessoa.setPessoaID(Convert.ToInt32(myDataReader["pessoaID"].ToString()));
                    myPessoa.setEmail(myDataReader["email"].ToString());
                    myPessoa.setObservacao(myDataReader["observacao"].ToString());
                    myPessoa.setSenha(myDataReader["senha"].ToString());
                    myPessoa.setLogin(myDataReader["login"].ToString());
                }
            }
            finally
            {
                if (myConnection != null)
                    myConnection.Close();

                if(myDataReader != null)
                    myDataReader.Close();
            }
            return myPessoa;    
        }

        public static Pessoa selectPessoaByLoginSenha(Pessoa myPessoa)
        {
            SqlConnection myConnection = null;
            SqlDataReader myDataReader = null;
            Pessoa retrievedPessoa = null;
            try
            {
                myConnection = SQLServerConnection.getConnection();
                SqlCommand myCommand = new SqlCommand("SELECT * FROM Pessoa WHERE login = @login AND senha = @senha", myConnection);

                SqlParameter paramLogin = new SqlParameter("login", SqlDbType.VarChar);
                paramLogin.Direction = ParameterDirection.Input;
                paramLogin.Value = myPessoa.getLogin();

                SqlParameter paramSenha = new SqlParameter("senha", SqlDbType.VarChar);
                paramSenha.Direction = ParameterDirection.Input;
                paramSenha.Value = myPessoa.getSenha();

                myConnection.Open();
                myCommand.Parameters.Add(paramLogin);
                myCommand.Parameters.Add(paramSenha);
                myDataReader = myCommand.ExecuteReader();

                if (myDataReader.Read())
                {
                    retrievedPessoa = PessoaBLL.newPessoa();
                    retrievedPessoa.setPessoaID(Convert.ToInt32(myDataReader["pessoaID"].ToString()));
                    retrievedPessoa.setEmail(myDataReader["email"].ToString());
                    retrievedPessoa.setObservacao(myDataReader["observacao"].ToString());
                    retrievedPessoa.setSenha(myDataReader["senha"].ToString());
                    retrievedPessoa.setLogin(myDataReader["login"].ToString());
                }
            }
            finally
            {
                if (myConnection != null)
                    myConnection.Close();

                if (myDataReader != null)
                    myDataReader.Close();
            }
            return retrievedPessoa;
        }

        public static void updatePessoa(Pessoa myPessoa)
        {
            SqlConnection myConnection = null;
            try
            {
                myConnection = SQLServerConnection.getConnection();
                SqlCommand myCommand = new SqlCommand("UPDATE Pessoa SET email = @email, observacao = @observacao,"
                + "login = @login, senha = @senha WHERE pessoaID = @pessoaID", myConnection);

                SqlParameter paramPessoaId = new SqlParameter("pessoaID", SqlDbType.Int);
                paramPessoaId.Direction = ParameterDirection.Input;
                paramPessoaId.Value = myPessoa.getPessoaID();

                SqlParameter paramEmail = new SqlParameter("email", SqlDbType.VarChar);
                paramEmail.Direction = ParameterDirection.Input;
                paramEmail.Value = myPessoa.getEmail();

                SqlParameter paramObservacao = new SqlParameter("observacao", SqlDbType.VarChar);
                paramObservacao.Direction = ParameterDirection.Input;
                paramObservacao.Value = myPessoa.getObservacao();

                SqlParameter paramLogin = new SqlParameter("login", SqlDbType.VarChar);
                paramLogin.Direction = ParameterDirection.Input;
                paramLogin.Value = myPessoa.getLogin();

                SqlParameter paramSenha = new SqlParameter("senha", SqlDbType.VarChar);
                paramSenha.Direction = ParameterDirection.Input;
                paramSenha.Value = myPessoa.getSenha();
                
                myCommand.Parameters.Add(paramPessoaId);
                myCommand.Parameters.Add(paramEmail);
                myCommand.Parameters.Add(paramObservacao);
                myCommand.Parameters.Add(paramLogin);
                myCommand.Parameters.Add(paramSenha);

                myConnection.Open();
                myCommand.ExecuteNonQuery();
            }
            finally
            {
                if (myConnection != null)
                    myConnection.Close();
            }
        }
    }
}